using System;
using System.Collections;
using Curriculum.Modelo.Clases;
using Curriculum.DataAccess.Server;
using Curriculum.Db4oHttpModule;
using System.Web;
using Db4objects;


namespace Curriculum.Services
{
	/// <summary>
	/// Summary description for UsuarioService.
	/// </summary>
	public class UsuarioService : ServiceBase
	{	
		#region Constructors

		public UsuarioService()
		{			
		}

		#endregion		

		#region Overrides

		protected override Type GetMyObjectType()
		{
			return typeof(Usuario);
		}

		#endregion
		
		public Usuario ObtenerUsuario(object usuarioId)
		{
			return base.ObtenerObjetoPorId(typeof(Usuario), usuarioId.ToString()) as Usuario;
		}
		public Usuario ObtenerUsuarioPorNombreYRol(string nombreUsuario, string nombreRol)
		{
			return dataManager.GetUsuarioPorNombreYRol(nombreRol, nombreUsuario);
		}

		/// <summary>
		/// Crea un Usuario
		/// </summary>
		/// <param name="usuario"></param>
		/// <returns>retorna el id con el que se dio de alta el usuario</returns>
		public object CrearUsuario(Usuario usuario)
		{
			try 
			{
				if (usuario.Rol.Id == null)
				{
					usuario.Rol.Id = Utiles.IdGenerator.GetNextId(usuario.Rol.GetType(), dataManager.Container);
				}
				return base.Crear(usuario);
			}
			catch (Exception ex)
			{
				throw new Exception("Error creando el usuario. " + ex.Message);
			}			
		}
		/// <summary>
		/// Modifica un Usuario
		/// </summary>
		/// <param name="usuario"></param>
		/// <returns>retorna el id del usuario</returns>
		public object ModificarUsuario(Usuario usuario)
		{

			return base.Modificar(usuario);
		}
		/// <summary>
		/// Elimina un Usuario
		/// </summary>
		/// <param name="usuarioId">id del usuario que se quiere eliminar</param>
		/// <returns></returns>
		public void EliminarUsuario(object usuarioId)
		{
			base.Eliminar(typeof(Usuario), usuarioId);
		}


		public IList GetUsuarios(string apellido, string nombre, string tipoRol, string username)
		{
			return dataManager.GetUsuarioLike(apellido, nombre, tipoRol, username);
		}


		public IList GetRoles(string nombreRol)
		{
			return dataManager.GetRoles(nombreRol);
		}

		public Rol GetRol(string nombreRol, string idRol)
		{			
			return dataManager.GetRol(nombreRol, idRol);
		}

		public IList GetUsuarios(string rol)
		{
			return dataManager.GetUsuarioLike(string.Empty, string.Empty, rol, string.Empty);
		}		


		public Usuario GetUsuario(string rol, string userName, string password)
		{
			return dataManager.GetUsuario(rol, userName, password);
		}

		public Usuario GetUsuarioPorRol(string nombreRol, string idRol)
		{
			return dataManager.GetUsuario(nombreRol, idRol);
		}

		public bool ExisteUsuario(string nombre, string rol)
		{
			return dataManager.ExisteUsuario(rol, nombre);
		}


	}
}
